﻿/*
给定一个字符串，请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b"，所以其长度为 1。
示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke"，所以其长度为 3。
     请注意，你的答案必须是 子串 的长度，"pwke" 是一个子序列，不是子串。
*/
#include "AllInc.h"

class Solution {
public:
	int lengthOfLongestSubstring(string s) 
	{
		//size_t len = s.length();
		//int max = 0;
		//int curLen = 0;
		//int begin = 0;
		//map<char, int> record;
		//for (size_t i = 0; i < len; i++)
		//{
		//	char c = s[i];
		//	auto it = record.find(c);

		//	// 没找到，放入记录中，增加长度
		//	if (it == record.end())
		//	{
		//		record[c] = i;
		//		curLen++;
		//		if (curLen > max)
		//		{
		//			max = curLen;
		//		}
		//	}
		//	// 找到了，从记录中删除之前的元素，重置长度
		//	else
		//	{
		//		int findPos = it->second;
		//		for (size_t j = begin; j <= findPos; j++)
		//		{
		//			record.erase(s[j]);
		//		}
		//		record[c] = i;
		//		curLen = i - findPos;
		//		begin = findPos + 1;
		//	}
		//}

		//return max;

		//vector<int> m(256, -1);
		//int left = -1;
		//int res = 0;
		//int len = s.size();
		//for (int i = 0; i < len; i++)
		//{
		//	left = max(left, m[s[i]]);
		//	m[s[i]] = i;
		//	res = max(res, i - left);
		//}

		//return res;
	}
};

//int main()
//{
//	Solution s;
//
//	int result = s.lengthOfLongestSubstring("pwwkew");
//
//	return 0;
//}
